//
//  ViewController.m
//  01.CoreData的简单使用
//
//  Created by J on 15/11/7.
//  Copyright © 2015年 JZJ. All rights reserved.
//
#import <CoreData/CoreData.h>
#import "ViewController.h"
#import "Employee.h"
#import "Status.h"
@interface ViewController (){
    
    NSManagedObjectContext* _context;
    NSManagedObjectContext* _companyContext;
    NSManagedObjectContext* _weiboContext;

}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    
    // 代码运行效率
//    fmdb 代码运行效率 高   codata 开发效率高
    
    
    
    
//CoreData 其实底层也是sql语句
    
    _companyContext=[self setUpContextWithModelName:@"Company"];
    _weiboContext=[self setUpContextWithModelName:@"Weibo"];
//     _context=context;//保存
    

}


/**
 *  根据模型文件返回上下文
 *
 *
 */


- (NSManagedObjectContext*)setUpContextWithModelName:(NSString*)modelName{
    
    
    //一个数据库对应一个上下文
    //1.创建模型文件[相当于数据库里的表]
    //2.添加实体[一张表]
    //3.创建实体类[相当模型]
    //4.生成上下文 关联模型文件生成数据库
    /**
     关联的时候 如果本地没有数据库文件 CoreData自己会创建
     */
    
    
    //生成上下文
    NSManagedObjectContext* context=[[NSManagedObjectContext alloc]initWithConcurrencyType:0];//导入 #import <CoreData/CoreData.h>
    
    //上下文关联数据库 持久化存储调度器
    
    //持久化 将数据保存到一个文件 而不是内存
    //model模型文件
    
    //如果bundle为空 会把bundle里面的所有模型文件的表 放到一个数据库里面
    //    NSManagedObjectModel* model=[NSManagedObjectModel mergedModelFromBundles:nil];
    
    NSURL * companyURL=[[NSBundle mainBundle] URLForResource:modelName withExtension:@"momd"];//如果要指定多个数据库用这个方法
    NSManagedObjectModel* model=[[NSManagedObjectModel alloc]initWithContentsOfURL:companyURL];
    
    
    
//    NSLog(@"%@",[[NSBundle mainBundle] bundlePath]);//获取路径
    
    NSPersistentStoreCoordinator* store=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
    
    context.persistentStoreCoordinator=store;//上下文的一个属性 持久化调度器
    
    
    //告诉coreData 数据库的名字和路径
    
    
    NSString* doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    
    
    NSString* sqlitePath=[doc stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.sqlite",modelName]];
    
    NSLog(@"%@",sqlitePath);
    
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil];

    
    
    return context;
    
}



//数据库的操作 CURD    Create Update Read Delete  增删改查


//增
- (IBAction)addEmplayee{
    
    
    //申明一个员工 保存
    Employee * employ=[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:_companyContext];
    
    
    employ.name=@"张三";
    employ.height=@2.3;
    employ.birthday=[NSDate date];
    
    
    
    
    NSError * error=nil;
    
    [_companyContext save:&error];
    
    
    if (error) {
        NSLog(@"%@",error);
    }
    
    
    



    //发微博

    //申明一个员工 保存
    Status * status=[NSEntityDescription insertNewObjectForEntityForName:@"Status" inManagedObjectContext:_weiboContext];


    status.text=@"毕业, 挺激动的";
    status.createDate=[NSDate date];




    [_weiboContext save:&error];


    if (error) {
    NSLog(@"%@",error);
    }







}


//查
- (IBAction)readEmployee{
    
    
    NSFetchRequest * request=[NSFetchRequest fetchRequestWithEntityName:@"Employee"];
    
    NSError * error=nil;
    NSArray * emps=[_companyContext executeFetchRequest:request error:&error];
    
    NSLog(@"%@",emps);
    if (error) {
        NSLog(@"%@",error);
    }
    
    
    
    
}



//分页查询
- (void)pageSearch{
    
    
   
    
}



- (IBAction)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
